//
//  HMHomeStatusViewModel.swift
//  Weibo22
//
//  Created by Apple on 16/12/4.
//  Copyright © 2016年 Apple. All rights reserved.
//

import UIKit
import SDWebImage

//  首页需要的viewModel
class HMHomeStatusViewModel: NSObject {

    //  对应的数据模型
    lazy var statusList: [HMStatusViewModel] = [HMStatusViewModel]()
    
    
    //  加载微博数据
    func loadData(isup: Bool, callback: @escaping (Bool, String)->()) {
        //  上拉加载所需要的微博id
        var maxId: Int64 = 0
        //  下拉刷新所需要的微博id
        var sinceId: Int64 = 0
        if isup {
            //  上拉加载,获取最后一个元素对应的微博的id
            maxId = statusList.last?.status?.id ?? 0
            
            if maxId > 0 {
                //  表示去除重复的微博id数据
                maxId -= 1
            }
            
        } else {
            //  下拉刷新
            sinceId = statusList.first?.status?.id ?? 0
        }
        
        let localArray = HMStatusDAL.checkedCacheData(maxId: maxId, sinceId: sinceId)
        print(localArray.count)
        
        
        var message = "没有加载到最新的微博数据"
        HMStatusDAL.loadData(maxId: maxId, sinceId: sinceId) { (statusDicArray) in
            
//        }
//        
//        
//        HMNetworkTools.sharedTools.requestStatus(maxid: maxId, sinceId: sinceId) { (response, error) in
//            if error != nil {
//                print(error!)
//                callback(false, message)
//                return
//            }
//            //  代码执行到此表示数据请求成功
//            let dic = response as! [String: Any]
//            //  新浪微博数据
//            let statusDicArray = dic["statuses"] as! [[String: Any]]
            
            //  缓存数据
//            HMStatusDAL.cacheData(statusDicArray: statusDicArray)
            
            
            
            //            var tempArray = [HMStatus]()
            //            for statusDic in statusDicArray {
            //                //  字典转模型
            //                let status = HMStatus(dic: statusDic)
            //                tempArray.append(status)
            //            }
            //  使用YYModel完成数组字典转成数组模型
            let modelArray = NSArray.yy_modelArray(with: HMStatus.self, json: statusDicArray) as! [HMStatus]
            
            var tempArray = [HMStatusViewModel]()
            //  遍历模型数组-> 让其转换成ViewModel数组
            
            //  创建调度组
            let group = DispatchGroup()
            
            for model in modelArray {
                //  判断是否只有一张图片,如果只有一张图片,那么去下载这个单张图片
                if model.pic_urls?.count == 1 {
                    
                    if let imageUrl = model.pic_urls!.first!.thumbnail_pic {
                        //  去下载原创微博的单张图片
                        group.enter()
                        SDWebImageManager.shared().downloadImage(with: URL(string: imageUrl), options: [], progress: nil, completed: { (image, error, _, _, _) in
                            print("原创微博单张图片下载完成")
                            group.leave()
                        })
                    }
                    
                    
                    
                }
                
                if model.retweeted_status?.pic_urls?.count == 1 {
                   //   去下载转发微博的单张图片
                    if let imageUrl = model.retweeted_status!.pic_urls!.first!.thumbnail_pic {
                        //  去下载转发微博的单张图片
                        group.enter()
                        SDWebImageManager.shared().downloadImage(with: URL(string: imageUrl), options: [], progress: nil, completed: { (image, error, _, _, _) in
                            print("转发微博单张图片下载完成")
                            group.leave()
                        })
                    }

                    
                    
                }
               
                
                //  创建viewModel
                let viewModel = HMStatusViewModel()
                //  关联微博模型对象
                viewModel.status = model
                tempArray.append(viewModel)
            }
            
            //  数据准备好了
            
            if isup {
                //  表示上拉加载,那么把获取的微博数据追加到原始数据后面
                self.statusList.append(contentsOf: tempArray)
            } else {
                //  表示下拉刷新, 那么数据要放到数组第一个元素的位置
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
            
            //self.statusList = tempArray
            
//            self.tableView.reloadData()
            
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }
            
            
            group.notify(queue: DispatchQueue.main, execute: {
                //  表示单张图片都下载完成以后加载微博数据
                print("所有的单张图片都下载完成了")
                 callback(true, message)
            })
            
           
            
        }
        
    }
    
}
